home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / UI / PADnoteUI.fl < prev    next >
Text File  |  2005-03-12  |  35KB  |  1,087 lines

  1. # data file for the Fltk User Interface Designer (fluid)
  2. version 1.0106 
  3. header_name {.h} 
  4. code_name {.cc}
  5. decl {\#include "../Params/PADnoteParameters.h"} {public
  6.  
  7. decl {\#include "../Misc/Util.h"} {public
  8.  
  9. decl {\#include "../Misc/Master.h"} {public
  10.  
  11. decl {\#include "ResonanceUI.h"} {public
  12.  
  13. decl {\#include <FL/Fl_Box.H>} {public
  14.  
  15. decl {\#include <FL/Fl_Group.H>} {public
  16.  
  17. decl {\#include <math.h>} {} 
  18.  
  19. decl {\#include <stdio.h>} {} 
  20.  
  21. decl {\#include <stdlib.h>} {} 
  22.  
  23. decl {\#include <string.h>} {} 
  24.  
  25. decl {\#include "WidgetPDial.h"} {public
  26.  
  27. decl {\#include "EnvelopeUI.h"} {public
  28.  
  29. decl {\#include "LFOUI.h"} {public
  30.  
  31. decl {\#include "FilterUI.h"} {public
  32.  
  33. decl {\#include "OscilGenUI.h"} {public
  34.  
  35. decl {\#include "PresetsUI.h"} {public
  36.  
  37. class PADnoteHarmonicProfile {: {public Fl_Box}
  38. } {
  39.   Function {PADnoteHarmonicProfile(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
  40.     code {pars=NULL;} {}
  41.   }
  42.   Function {init(PADnoteParameters *pars,Master *master_)} {} {
  43.     code {master=master_;
  44. this->pars=pars;} {}
  45.   }
  46.   Function {draw()} {} {
  47.     code {int ox=x(),oy=y(),lx=w(),ly=h();
  48. if (!visible()) return;
  49. REALTYPE smps[lx];
  50.  
  51. REALTYPE realbw=pars->getprofile(smps,lx);
  52. bool active=active_r();
  53.  
  54. //draw the equivalent bandwidth
  55. if (active) fl_color(220,220,220);
  56.  else fl_color(160,165,165);
  57. fl_line_style(0);
  58. int rbw=(int)(realbw*(lx-1.0)/2.0);
  59. for (int i=lx/2-rbw;i<(lx/2+rbw);i++) fl_line(ox+i,oy,ox+i,oy+ly-1);
  60.  
  61. fl_line_style(0);
  62. if (active) fl_color(200,200,200);
  63.  else  fl_color(160,160,160);
  64. for (int i=1;i<10;i++){
  65.     int kx=(int)(lx/10.0*i);
  66.     fl_line(ox+kx,oy,ox+kx,oy+ly-1);
  67. };
  68. for (int i=1;i<5;i++){
  69.     int ky=(int)(ly/5.0*i);
  70.     fl_line(ox,oy+ly-ky,ox+lx,oy+ly-ky-1);
  71. };
  72.  
  73.  
  74. fl_color(120,120,120);
  75. fl_line_style(FL_DOT);
  76. fl_line(ox+lx/2,oy,ox+lx/2,oy+ly);
  77.  
  78. //draw the graph
  79. fl_line_style(0);
  80. int old=0;
  81. for (int i=0;i<lx;i++){
  82.    int val=(int) ((ly-2)*smps[i]);
  83.    if (active) fl_color(180,210,240);
  84.       else fl_color(150,150,155);
  85.    fl_line(ox+i,oy+ly-1,ox+i,oy+ly-1-val);
  86.    if (active) fl_color(0,0,100);
  87.        else fl_color(150,150,150);
  88.    if (i>0) fl_line(ox+i-1,oy+ly-2-old,ox+i,oy+ly-2-val);
  89.    old=val;   
  90. };
  91.  
  92.  
  93. fl_line_style(FL_DASH);
  94. if (active) fl_color(0,100,220);
  95.     else fl_color(150,160,170);
  96. fl_line(ox+lx/2-rbw,oy,ox+lx/2-rbw,oy+ly-1);
  97. fl_line(ox+lx/2+rbw,oy,ox+lx/2+rbw,oy+ly-1);
  98.  
  99. fl_line_style(0);} {}
  100.   }
  101.   decl {Master *master;} {}
  102.   decl {PADnoteParameters *pars;} {public
  103.   }
  104.  
  105. class PADnoteOvertonePosition {: {public Fl_Box}
  106. } {
  107.   Function {PADnoteOvertonePosition(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
  108.     code {pars=NULL;} {}
  109.   }
  110.   Function {init(PADnoteParameters *pars,Master *master_)} {} {
  111.     code {master=master_;
  112. this->pars=pars;} {}
  113.   }
  114.   Function {draw()} {} {
  115.     code {if (!visible()) return;
  116. const int maxdb=60;
  117.  
  118. int ox=x(),oy=y(),lx=w(),ly=h();
  119. const int maxharmonic=64;
  120.  
  121.  
  122. for (int i=1;i<maxharmonic;i++){
  123.     fl_color(200,200,200);
  124.     fl_line_style(FL_DOT);
  125.     if (i%5==0) fl_line_style(0);
  126.     if (i%10==0) fl_color(160,160,160);
  127.     int kx=(int)(lx/(REALTYPE)maxharmonic*i);
  128.     fl_line(ox+kx,oy,ox+kx,oy+ly);
  129. };
  130.  
  131.  
  132.  
  133. int n=OSCIL_SIZE/2;
  134. REALTYPE spc[n];
  135. for (int i=0;i<n;i++) spc[i]=0.0;
  136.  
  137. pthread_mutex_lock(&master->mutex);
  138. pars->oscilgen->getspectrum(n,spc,0);
  139. pthread_mutex_unlock(&master->mutex);
  140.  
  141.  
  142. //normalize
  143. REALTYPE max=0;
  144. for (int i=0;i<n;i++){
  145.    REALTYPE x=fabs(spc[i]);
  146.    if (max<x) max=x;
  147. }
  148. if (max<0.000001) max=1.0;
  149. max=max*1.05;
  150.  
  151. REALTYPE spectrum[lx];
  152. for (int i=0;i<lx;i++) spectrum[i]=0;
  153.  
  154.  
  155. for (int i=1;i<n;i++){
  156.     REALTYPE nhr=pars->getNhr(i);
  157.     int kx=(int)(lx/(REALTYPE)maxharmonic*nhr);
  158.     if ((kx<0)||(kx>lx)) continue;
  159.  
  160.         spectrum[kx]=spc[i-1]/max+1e-9;
  161.  
  162. };
  163.  
  164. fl_color(180,0,0);
  165. fl_line_style(0);
  166.  
  167. if (pars->Pmode==2){
  168.    int old=0;
  169.    for (int i=1;i<lx;i++){
  170.     if ((spectrum[i]>1e-10)||(i==(lx-1))){
  171.         int delta=i-old;
  172.         REALTYPE val1=spectrum[old];
  173.         REALTYPE val2=spectrum[i];
  174.  
  175.         REALTYPE idelta=1.0/delta;
  176.         for (int j=0;j<delta;j++){
  177.             REALTYPE x=idelta*j;
  178.             spectrum[old+j]=val1*(1.0-x)+val2*x;
  179.         };
  180.         old=i;
  181.     };
  182.       
  183.    };
  184. };
  185.  
  186. for (int i=0;i<lx;i++){
  187.     REALTYPE x=spectrum[i];
  188.         if (x>dB2rap(-maxdb)) x=rap2dB(x)/maxdb+1;
  189.              else continue;
  190.            int yy=(int)(x*ly);
  191.     fl_line(ox+i,oy+ly-1-yy,ox+i,oy+ly-1);
  192.       
  193. };} {}
  194.   }
  195.   decl {Master *master;} {}
  196.   decl {PADnoteParameters *pars;} {public
  197.   }
  198.  
  199. class PADnoteUI {open : {public PresetsUI_}
  200. } {
  201.   Function {PADnoteUI(PADnoteParameters *parameters,Master *master_)} {open
  202.   } {
  203.     code {pars=parameters;
  204. master=master_;
  205. oscui=NULL;
  206. resui=new ResonanceUI(pars->resonance);
  207. make_window();} {}
  208.   }
  209.   Function {make_window()} {open
  210.   } {
  211.     Fl_Window padnotewindow {
  212.       label {PAD synth Parameters} selected
  213.       xywh {76 165 535 450} type Double hide
  214.     } {
  215.       Fl_Tabs {} {
  216.         callback {if (o->value()!=harmonicstructuregroup) applybutton->hide();
  217.     else applybutton->show();}
  218.         xywh {0 0 535 395}
  219.       } {
  220.         Fl_Group harmonicstructuregroup {
  221.           label {Harmonic Structure}
  222.           xywh {0 20 535 375} box ENGRAVED_BOX
  223.         } {
  224.           Fl_Group bwprofilegroup {
  225.             xywh {5 30 90 260} box ENGRAVED_BOX
  226.             code0 {if (pars->Pmode!=0) o->deactivate();}
  227.           } {
  228.             Fl_Dial hpbasepar1 {
  229.               label Width
  230.               callback {pars->Php.base.par1=(int) o->value();
  231. hprofile->redraw();
  232. cbwidget->do_callback();}
  233.               xywh {20 75 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  234.               code0 {o->value(pars->Php.base.par1);}
  235.               class WidgetPDial
  236.             }
  237.             Fl_Choice hpbasetype {
  238.               label {Base Type}
  239.               callback {pars->Php.base.type=o->value();
  240. hprofile->redraw();
  241. cbwidget->do_callback();}
  242.               xywh {15 45 75 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
  243.               code0 {o->value(pars->Php.base.type);}
  244.             } {
  245.               menuitem {} {
  246.                 label Gauss
  247.                 xywh {15 15 100 20} labelfont 1 labelsize 10
  248.               }
  249.               menuitem {} {
  250.                 label Square
  251.                 xywh {25 25 100 20} labelfont 1 labelsize 10
  252.               }
  253.               menuitem {} {
  254.                 label DoubleExp
  255.                 xywh {35 35 100 20} labelfont 1 labelsize 10
  256.               }
  257.             }
  258.             Fl_Dial hpfreqmult {
  259.               label FreqMlt
  260.               callback {pars->Php.freqmult=(int) o->value();
  261. hprofile->redraw();
  262. cbwidget->do_callback();}
  263.               xywh {55 75 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  264.               code0 {o->value(pars->Php.freqmult);}
  265.               class WidgetPDial
  266.             }
  267.             Fl_Dial hpmpar1 {
  268.               label Str
  269.               callback {pars->Php.modulator.par1=(int) o->value();
  270. hprofile->redraw();
  271. cbwidget->do_callback();}
  272.               xywh {15 115 20 20} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  273.               code0 {o->value(pars->Php.modulator.par1);}
  274.               class WidgetPDial
  275.             }
  276.             Fl_Dial hpmfreq {
  277.               label SFreq
  278.               callback {pars->Php.modulator.freq=(int) o->value();
  279. hprofile->redraw();
  280. cbwidget->do_callback();}
  281.               xywh {40 115 20 20} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  282.               code0 {o->value(pars->Php.modulator.freq);}
  283.               class WidgetPDial
  284.             }
  285.             Fl_Group {} {
  286.               xywh {10 160 80 105} box BORDER_BOX
  287.             } {
  288.               Fl_Choice hpamptype {
  289.                 label AmpMultiplier
  290.                 callback {pars->Php.amp.type=o->value();
  291. hprofile->redraw();
  292. cbwidget->do_callback();}
  293.                 xywh {15 175 70 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
  294.                 code0 {o->value(pars->Php.amp.type);}
  295.               } {
  296.                 menuitem {} {
  297.                   label OFF
  298.                   xywh {45 45 100 20} labelfont 1 labelsize 10
  299.                 }
  300.                 menuitem {} {
  301.                   label Gauss
  302.                   xywh {55 55 100 20} labelfont 1 labelsize 10
  303.                 }
  304.                 menuitem {} {
  305.                   label Sine
  306.                   xywh {65 65 100 20} labelfont 1 labelsize 10
  307.                 }
  308.                 menuitem {} {
  309.                   label Flat
  310.                   xywh {75 75 100 20} labelfont 1 labelsize 10
  311.                 }
  312.               }
  313.               Fl_Choice hpampmode {
  314.                 label AmpMode
  315.                 callback {pars->Php.amp.mode=o->value();
  316. hprofile->redraw();
  317. cbwidget->do_callback();}
  318.                 xywh {15 205 70 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
  319.                 code0 {o->value(pars->Php.amp.mode);}
  320.               } {
  321.                 menuitem {} {
  322.                   label Sum
  323.                   xywh {60 60 100 20} labelfont 1 labelsize 10
  324.                 }
  325.                 menuitem {} {
  326.                   label Mult
  327.                   xywh {70 70 100 20} labelfont 1 labelsize 10
  328.                 }
  329.                 menuitem {} {
  330.                   label Div1
  331.                   xywh {80 80 100 20} labelfont 1 labelsize 10
  332.                 }
  333.                 menuitem {} {
  334.                   label Div2
  335.                   xywh {90 90 100 20} labelfont 1 labelsize 10
  336.                 }
  337.               }
  338.               Fl_Dial hpamppar1 {
  339.                 label Par1
  340.                 callback {pars->Php.amp.par1=(int) o->value();
  341. hprofile->redraw();
  342. cbwidget->do_callback();}
  343.                 xywh {15 235 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  344.                 code0 {o->value(pars->Php.amp.par1);}
  345.                 class WidgetPDial
  346.               }
  347.               Fl_Dial hpamppar2 {
  348.                 label Par2
  349.                 callback {pars->Php.amp.par2=(int) o->value();
  350. hprofile->redraw();
  351. cbwidget->do_callback();}
  352.                 xywh {55 235 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  353.                 code0 {o->value(pars->Php.amp.par2);}
  354.                 class WidgetPDial
  355.               }
  356.             }
  357.             Fl_Check_Button hpautoscale {
  358.               label autoscale
  359.               callback {pars->Php.autoscale=(int) o->value();
  360. hprofile->redraw();
  361. cbwidget->do_callback();}
  362.               xywh {10 270 60 15} down_box DOWN_BOX labelsize 10
  363.               code0 {o->value(pars->Php.autoscale);}
  364.             }
  365.             Fl_Choice hponehalf {
  366.               callback {pars->Php.onehalf=o->value();
  367. hprofile->redraw();
  368. cbwidget->do_callback();}
  369.               xywh {10 143 80 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
  370.               code0 {o->value(pars->Php.onehalf);}
  371.             } {
  372.               menuitem {} {
  373.                 label Full
  374.                 xywh {25 25 100 20} labelfont 1 labelsize 10
  375.               }
  376.               menuitem {} {
  377.                 label {Upper Half}
  378.                 xywh {45 45 100 20} labelfont 1 labelsize 10
  379.               }
  380.               menuitem {} {
  381.                 label {Lower Half}
  382.                 xywh {35 35 100 20} labelfont 1 labelsize 10
  383.               }
  384.             }
  385.             Fl_Dial hpwidth {
  386.               label Size
  387.               callback {pars->Php.width=(int) o->value();
  388. hprofile->redraw();
  389. cbwidget->do_callback();}
  390.               xywh {65 115 20 20} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  391.               code0 {o->value(pars->Php.width);}
  392.               class WidgetPDial
  393.             }
  394.           }
  395.           Fl_Group {} {
  396.             xywh {100 155 270 135} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179 align 6
  397.             code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
  398.             code1 {osc->init(pars->oscilgen,master);}
  399.           } {}
  400.           Fl_Button {} {
  401.             label Change
  402.             callback {if (oscui!=NULL) delete (oscui);
  403. oscui=new OscilEditor(pars->oscilgen,osc,cbwidget,applybutton,master);}
  404.             xywh {375 270 60 20} box THIN_UP_BOX labelfont 1 labelsize 12
  405.           }
  406.           Fl_Box cbwidget {
  407.             label {Harmonic Content}
  408.             callback {overtonepos->redraw();
  409. applybutton->color(FL_RED);
  410. applybutton->redraw();}
  411.             xywh {125 135 205 20} align 16
  412.           }
  413.           Fl_Button {} {
  414.             label Resonance
  415.             callback {resui->resonancewindow->redraw();
  416. resui->resonancewindow->show();
  417. resui->setcbwidget(cbwidget,applybutton);}
  418.             xywh {375 225 80 20} box THIN_UP_BOX
  419.           }
  420.           Fl_Dial bwdial {
  421.             label BandWidth
  422.             callback {bwcents->value(pars->setPbandwidth((int) o->value()));
  423. cbwidget->do_callback();}
  424.             xywh {15 295 35 35} box ROUND_UP_BOX labelsize 11 maximum 1000 step 1
  425.             code0 {o->value(pars->Pbandwidth);}
  426.             code1 {if (pars->Pmode!=0) o->deactivate();}
  427.             class WidgetPDial
  428.           }
  429.           Fl_Value_Output bwcents {
  430.             label cents
  431.             xywh {55 305 55 15} labelsize 10 align 6 maximum 10000 step 0.1
  432.             code0 {o->value(pars->setPbandwidth(pars->Pbandwidth));}
  433.             code1 {if (pars->Pmode!=0) o->deactivate();}
  434.           }
  435.           Fl_Group {} {
  436.             xywh {315 295 215 45} box ENGRAVED_BOX
  437.           } {
  438.             Fl_Choice hrpostype {
  439.               label OvertonesPosition
  440.               callback {pars->Phrpos.type=o->value();
  441. overtonepos->redraw();
  442. cbwidget->do_callback();}
  443.               xywh {325 310 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 12
  444.               code0 {o->value(pars->Phrpos.type);}
  445.             } {
  446.               menuitem {} {
  447.                 label Harmonic
  448.                 xywh {70 70 100 20} labelfont 1 labelsize 12
  449.               }
  450.               menuitem {} {
  451.                 label ShiftU
  452.                 xywh {80 80 100 20} labelfont 1 labelsize 12
  453.               }
  454.               menuitem {} {
  455.                 label ShiftL
  456.                 xywh {90 90 100 20} labelfont 1 labelsize 12
  457.               }
  458.               menuitem {} {
  459.                 label PowerU
  460.                 xywh {90 90 100 20} labelfont 1 labelsize 12
  461.               }
  462.               menuitem {} {
  463.                 label PowerL
  464.                 xywh {100 100 100 20} labelfont 1 labelsize 12
  465.               }
  466.               menuitem {} {
  467.                 label Sine
  468.                 xywh {110 110 100 20} labelfont 1 labelsize 12
  469.               }
  470.               menuitem {} {
  471.                 label Power
  472.                 xywh {120 120 100 20} labelfont 1 labelsize 12
  473.               }
  474.             }
  475.             Fl_Dial hrpospar1 {
  476.               label Par1
  477.               callback {pars->Phrpos.par1=(int) o->value();
  478. overtonepos->redraw();
  479. cbwidget->do_callback();}
  480.               xywh {425 310 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 255 step 1
  481.               code0 {o->value(pars->Phrpos.par1);}
  482.               class WidgetPDial
  483.             }
  484.             Fl_Dial hrpospar2 {
  485.               label Par2
  486.               callback {pars->Phrpos.par2=(int) o->value();
  487. overtonepos->redraw();
  488. cbwidget->do_callback();}
  489.               xywh {460 310 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 255 step 1
  490.               code0 {o->value(pars->Phrpos.par2);}
  491.               class WidgetPDial
  492.             }
  493.             Fl_Dial hrpospar3 {
  494.               label ForceH
  495.               callback {pars->Phrpos.par3=(int) o->value();
  496. overtonepos->redraw();
  497. cbwidget->do_callback();}
  498.               xywh {495 310 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 255 step 1
  499.               code0 {o->value(pars->Phrpos.par3);}
  500.               class WidgetPDial
  501.             }
  502.           }
  503.           Fl_Choice bwscale {
  504.             label {Bandwidth Scale}
  505.             callback {pars->Pbwscale=(int) o->value();
  506. cbwidget->do_callback();}
  507.             xywh {120 305 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 12
  508.             code0 {o->value(pars->Pbwscale);}
  509.             code1 {if (pars->Pmode!=0) o->deactivate();}
  510.           } {
  511.             menuitem {} {
  512.               label Normal
  513.               xywh {95 95 100 20} labelfont 1 labelsize 12
  514.             }
  515.             menuitem {} {
  516.               label EqualHz
  517.               xywh {105 105 100 20} labelfont 1 labelsize 12
  518.             }
  519.             menuitem {} {
  520.               label Quater
  521.               xywh {115 115 100 20} labelfont 1 labelsize 12
  522.             }
  523.             menuitem {} {
  524.               label Half
  525.               xywh {125 125 100 20} labelfont 1 labelsize 12
  526.             }
  527.             menuitem {} {
  528.               label {75%}
  529.               xywh {135 135 100 20} labelfont 1 labelsize 12
  530.             }
  531.             menuitem {} {
  532.               label {150%}
  533.               xywh {145 145 100 20} labelfont 1 labelsize 12
  534.             }
  535.             menuitem {} {
  536.               label Double
  537.               xywh {145 145 100 20} labelfont 1 labelsize 12
  538.             }
  539.             menuitem {} {
  540.               label {Inv.Half}
  541.               xywh {155 155 100 20} labelfont 1 labelsize 12
  542.             }
  543.           }
  544.           Fl_Group overtonepos {
  545.             xywh {5 345 525 45} box FLAT_BOX color 54 selection_color 218 labelcolor 63
  546.             code0 {PADnoteOvertonePosition *opui=new PADnoteOvertonePosition(o->x(),o->y(),o->w(),o->h(),"");}
  547.             code1 {opui->init(pars,master);}
  548.           } {}
  549.           Fl_Choice qsamplesize {
  550.             label {Sample Size}
  551.             callback {pars->Pquality.samplesize=(int) o->value();
  552. cbwidget->do_callback();}
  553.             xywh {375 190 115 20} down_box BORDER_BOX labelsize 10 align 5 textsize 12
  554.             code0 {o->value(pars->Pquality.samplesize);}
  555.           } {
  556.             menuitem {} {
  557.               label {16k (Tiny)}
  558.               xywh {155 155 100 20} labelfont 1 labelsize 12
  559.             }
  560.             menuitem {} {
  561.               label 32k
  562.               xywh {165 165 100 20} labelfont 1 labelsize 12
  563.             }
  564.             menuitem {} {
  565.               label {64k (Small)}
  566.               xywh {175 175 100 20} labelfont 1 labelsize 12
  567.             }
  568.             menuitem {} {
  569.               label 128k
  570.               xywh {185 185 100 20} labelfont 1 labelsize 12
  571.             }
  572.             menuitem {} {
  573.               label {256k (Normal)}
  574.               xywh {205 205 100 20} labelfont 1 labelsize 12
  575.             }
  576.             menuitem {} {
  577.               label 512k
  578.               xywh {200 200 100 20} labelfont 1 labelsize 12
  579.             }
  580.             menuitem {} {
  581.               label {1M (Big)}
  582.               xywh {205 205 100 20} labelfont 1 labelsize 12
  583.             }
  584.           }
  585.           Fl_Choice qsmpoct {
  586.             label {smp/oct}
  587.             callback {pars->Pquality.smpoct=(int) o->value();
  588. cbwidget->do_callback();}
  589.             xywh {430 155 45 20} down_box BORDER_BOX labelsize 12 align 5 textsize 12
  590.             code0 {o->value(pars->Pquality.smpoct);}
  591.           } {
  592.             menuitem {} {
  593.               label {0.5}
  594.               xywh {10 10 100 20} labelfont 1 labelsize 12
  595.             }
  596.             menuitem {} {
  597.               label 1
  598.               xywh {0 0 100 20} labelfont 1 labelsize 12
  599.             }
  600.             menuitem {} {
  601.               label 2
  602.               xywh {10 10 100 20} labelfont 1 labelsize 12
  603.             }
  604.             menuitem {} {
  605.               label 3
  606.               xywh {20 20 100 20} labelfont 1 labelsize 12
  607.             }
  608.             menuitem {} {
  609.               label 4
  610.               xywh {30 30 100 20} labelfont 1 labelsize 12
  611.             }
  612.             menuitem {} {
  613.               label 6
  614.               xywh {40 40 100 20} labelfont 1 labelsize 12
  615.             }
  616.             menuitem {} {
  617.               label 12
  618.               xywh {50 50 100 20} labelfont 1 labelsize 12
  619.             }
  620.           }
  621.           Fl_Choice qoct {
  622.             label {no.oct}
  623.             callback {pars->Pquality.oct=(int) o->value();
  624. cbwidget->do_callback();}
  625.             xywh {480 155 45 20} down_box BORDER_BOX labelsize 12 align 5 textsize 12
  626.             code0 {o->value(pars->Pquality.oct);}
  627.           } {
  628.             menuitem {} {
  629.               label 1
  630.               xywh {10 10 100 20} labelfont 1 labelsize 12
  631.             }
  632.             menuitem {} {
  633.               label 2
  634.               xywh {20 20 100 20} labelfont 1 labelsize 12
  635.             }
  636.             menuitem {} {
  637.               label 3
  638.               xywh {30 30 100 20} labelfont 1 labelsize 12
  639.             }
  640.             menuitem {} {
  641.               label 4
  642.               xywh {40 40 100 20} labelfont 1 labelsize 12
  643.             }
  644.             menuitem {} {
  645.               label 5
  646.               xywh {50 50 100 20} labelfont 1 labelsize 12
  647.             }
  648.             menuitem {} {
  649.               label 6
  650.               xywh {60 60 100 20} labelfont 1 labelsize 12
  651.             }
  652.             menuitem {} {
  653.               label 7
  654.               xywh {70 70 100 20} labelfont 1 labelsize 12
  655.             }
  656.             menuitem {} {
  657.               label 8
  658.               xywh {80 80 100 20} labelfont 1 labelsize 12
  659.             }
  660.           }
  661.           Fl_Choice qbasenote {
  662.             label base
  663.             callback {pars->Pquality.basenote=(int) o->value();
  664. cbwidget->do_callback();}
  665.             xywh {375 155 50 20} down_box BORDER_BOX labelsize 12 align 5 textsize 12
  666.             code0 {o->value(pars->Pquality.basenote);}
  667.           } {
  668.             menuitem {} {
  669.               label {C-2}
  670.               xywh {10 10 100 20} labelfont 1
  671.             }
  672.             menuitem {} {
  673.               label {G-2}
  674.               xywh {20 20 100 20} labelfont 1
  675.             }
  676.             menuitem {} {
  677.               label {C-3}
  678.               xywh {20 20 100 20} labelfont 1
  679.             }
  680.             menuitem {} {
  681.               label {G-3}
  682.               xywh {30 30 100 20} labelfont 1
  683.             }
  684.             menuitem {} {
  685.               label {C-4}
  686.               xywh {30 30 100 20} labelfont 1
  687.             }
  688.             menuitem {} {
  689.               label {G-4}
  690.               xywh {40 40 100 20} labelfont 1
  691.             }
  692.             menuitem {} {
  693.               label {C-5}
  694.               xywh {40 40 100 20} labelfont 1
  695.             }
  696.             menuitem {} {
  697.               label {G-5}
  698.               xywh {50 50 100 20} labelfont 1
  699.             }
  700.             menuitem {} {
  701.               label {G-6}
  702.               xywh {60 60 100 20} labelfont 1
  703.             }
  704.           }
  705.           Fl_Group hprofile {
  706.             xywh {100 45 430 90} box FLAT_BOX color 54 selection_color 218 labelcolor 63
  707.             code0 {PADnoteHarmonicProfile *hpui=new PADnoteHarmonicProfile(o->x(),o->y(),o->w(),o->h(),"");}
  708.             code1 {hpui->init(pars,master);}
  709.             code2 {if (pars->Pmode!=0) { o->deactivate(); o->color(48);};}
  710.           } {}
  711.           Fl_Box {} {
  712.             label {Profile of One Harmonic (Frequency Distribution)}
  713.             xywh {160 25 315 20}
  714.           }
  715.           Fl_Choice spectrummode {
  716.             label {Spectrum Mode}
  717.             callback {pars->Pmode=(int) o->value();
  718.  
  719. if (pars->Pmode==0){
  720.    bwprofilegroup->activate();
  721.    bwdial->activate();
  722.    bwcents->activate();
  723.    hprofile->activate();
  724.    hprofile->color(54);
  725.    bwscale->activate();
  726. } else {
  727.    bwprofilegroup->deactivate();
  728.    bwdial->deactivate();
  729.    bwcents->deactivate();
  730.    hprofile->deactivate();
  731.    hprofile->color(48);
  732.    bwscale->deactivate();
  733. };
  734.  
  735. cbwidget->do_callback();}
  736.             xywh {220 305 90 20} down_box BORDER_BOX labelfont 1 labelsize 10 labelcolor 0 align 5 textsize 12
  737.             code0 {o->value(pars->Pmode);}
  738.           } {
  739.             menuitem {} {
  740.               label Bandwidth
  741.               xywh {105 105 100 20} labelfont 1 labelsize 12
  742.             }
  743.             menuitem {} {
  744.               label Discrete
  745.               xywh {125 125 100 20} labelfont 1 labelsize 12 labelcolor 0
  746.             }
  747.             menuitem {} {
  748.               label Continous
  749.               xywh {115 115 100 20} labelfont 1 labelsize 12 labelcolor 0
  750.             }
  751.           }
  752.         }
  753.         Fl_Group {} {
  754.           label {Envelopes&LFOs}
  755.           xywh {0 20 535 375} box ENGRAVED_BOX hide
  756.         } {
  757.           Fl_Group {} {
  758.             label FREQUENCY
  759.             xywh {5 275 525 115} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  760.           } {
  761.             Fl_Group freqenv {
  762.               label {PADSynth - Frequency Envelope} open
  763.               xywh {10 315 205 70} box FLAT_BOX color 51 align 144
  764.               code0 {o->init(pars->FreqEnvelope);}
  765.               class EnvelopeUI
  766.             } {}
  767.             Fl_Counter octave {
  768.               label Octave
  769.               callback {int k=(int) o->value();
  770. if (k<0) k+=16;
  771. pars->PCoarseDetune = k*1024+
  772.    pars->PCoarseDetune%1024;}
  773.               tooltip Octave xywh {470 295 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 12
  774.               code0 {int k=pars->PCoarseDetune/1024;}
  775.               code1 {if (k>=8) k-=16;}
  776.               code2 {o->value(k);}
  777.             }
  778.             Fl_Counter coarsedet {
  779.               label {Coarse det.}
  780.               callback {int k=(int) o->value();
  781. if (k<0) k+=1024;
  782. pars->PCoarseDetune = k+
  783.    (pars->PCoarseDetune/1024)*1024;}
  784.               tooltip {Coarse Detune} xywh {455 365 60 20} labelsize 10 align 5 minimum -64 maximum 63 step 1 textfont 1 textsize 12
  785.               code0 {int k=pars->PCoarseDetune%1024;}
  786.               code1 {if (k>=512) k-=1024;}
  787.               code2 {o->value(k);}
  788.               code3 {o->lstep(10);}
  789.             }
  790.             Fl_Group freqlfo {
  791.               label {Frequency LFO     } open
  792.               xywh {215 315 230 70} box FLAT_BOX color 47 align 144
  793.               code0 {o->init(pars->FreqLfo);}
  794.               class LFOUI
  795.             } {}
  796.             Fl_Slider detune {
  797.               callback {pars->PDetune=(int)o->value()+8192;
  798. detunevalueoutput->do_callback();}
  799.               tooltip {Fine Detune (cents)} xywh {60 295 295 15} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
  800.               code0 {o->value(pars->PDetune-8192);}
  801.             }
  802.             Fl_Value_Output detunevalueoutput {
  803.               label Detune
  804.               callback {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));}
  805.               xywh {12 295 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
  806.               code0 {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));}
  807.             }
  808.             Fl_Choice detunetype {
  809.               label {Detune Type}
  810.               callback {pars->PDetuneType=(int) o->value()+1;
  811. detunevalueoutput->do_callback();} open
  812.               xywh {450 335 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  813.               code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
  814.               code1 {o->value(pars->PDetuneType-1);}
  815.             } {}
  816.             Fl_Check_Button hz440 {
  817.               label 440Hz
  818.               callback {int x=(int) o->value();
  819. pars->Pfixedfreq=x;
  820. if (x==0) fixedfreqetdial->deactivate();
  821.    else fixedfreqetdial->activate();}
  822.               tooltip {set the base frequency to 440Hz} xywh {365 295 50 15} down_box DOWN_BOX labelfont 1 labelsize 11
  823.               code0 {o->value(pars->Pfixedfreq);}
  824.             }
  825.             Fl_Dial fixedfreqetdial {
  826.               label {Eq.T.}
  827.               callback {pars->PfixedfreqET=(int) o->value();}
  828.               tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {420 295 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
  829.               code0 {o->value(pars->PfixedfreqET);}
  830.               code1 {if (pars->Pfixedfreq==0) o->deactivate();}
  831.               class WidgetPDial
  832.             }
  833.           }
  834.           Fl_Group {} {
  835.             label AMPLITUDE
  836.             xywh {5 25 240 250} box THIN_UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  837.           } {
  838.             Fl_Value_Slider volume {
  839.               label Vol
  840.               callback {pars->PVolume=(int)o->value();}
  841.               tooltip Volume xywh {10 50 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  842.               code0 {o->value(pars->PVolume);}
  843.             }
  844.             Fl_Value_Slider vsns {
  845.               label {V.Sns}
  846.               callback {pars->PAmpVelocityScaleFunction=(int) o->value();}
  847.               tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 70 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  848.               code0 {o->value(pars->PAmpVelocityScaleFunction);}
  849.             }
  850.             Fl_Dial pan {
  851.               label Pan
  852.               callback {pars->PPanning=(int) o->value();}
  853.               tooltip {Panning (leftmost is Random)} xywh {210 45 30 30} box ROUND_UP_BOX labelsize 11 maximum 127 step 1
  854.               code0 {o->value(pars->PPanning);}
  855.               class WidgetPDial
  856.             }
  857.             Fl_Dial pstr {
  858.               label {P.Str.}
  859.               callback {pars->PPunchStrength=(int) o->value();}
  860.               tooltip {Punch Strength} xywh {125 247 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  861.               code0 {o->value(pars->PPunchStrength);}
  862.               class WidgetPDial
  863.             }
  864.             Fl_Dial pt {
  865.               label {P.t.}
  866.               callback {pars->PPunchTime=(int) o->value();}
  867.               tooltip {Punch Time (duration)} xywh {155 247 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  868.               code0 {o->value(pars->PPunchTime);}
  869.               class WidgetPDial
  870.             }
  871.             Fl_Dial pstc {
  872.               label {P.Stc.}
  873.               callback {pars->PPunchStretch=(int) o->value();}
  874.               tooltip {Punch Stretch} xywh {185 247 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  875.               code0 {o->value(pars->PPunchStretch);}
  876.               class WidgetPDial
  877.             }
  878.             Fl_Dial pvel {
  879.               label {P.Vel.}
  880.               callback {pars->PPunchVelocitySensing=(int) o->value();}
  881.               tooltip {Punch Velocity Sensing} xywh {215 247 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  882.               code0 {o->value(pars->PPunchVelocitySensing);}
  883.               class WidgetPDial
  884.             }
  885.             Fl_Group ampenv {
  886.               label {PADSynth - Amplitude Envelope} open
  887.               xywh {10 95 205 70} box FLAT_BOX color 51 align 144
  888.               code0 {o->init(pars->AmpEnvelope);}
  889.               class EnvelopeUI
  890.             } {}
  891.             Fl_Group amplfo {
  892.               label {Amplitude LFO     } open
  893.               xywh {10 165 230 70} box FLAT_BOX color 47 align 144
  894.               code0 {o->init(pars->AmpLfo);}
  895.               class LFOUI
  896.             } {}
  897.             Fl_Check_Button stereo {
  898.               label Stereo
  899.               callback {pars->PStereo=(int) o->value();
  900. hprofile->redraw();}
  901.               xywh {15 245 70 25} down_box DOWN_BOX
  902.               code0 {o->value(pars->PStereo);}
  903.             }
  904.           }
  905.           Fl_Group {} {
  906.             label FILTER
  907.             xywh {245 25 285 250} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  908.           } {
  909.             Fl_Group filterenv {
  910.               label {PADSynth - Filter Envelope} open
  911.               xywh {250 130 275 70} box FLAT_BOX color 51 align 144
  912.               code0 {o->init(pars->FilterEnvelope);}
  913.               class EnvelopeUI
  914.             } {}
  915.             Fl_Group filterlfo {
  916.               label {Filter LFO     } open
  917.               xywh {250 200 230 70} box FLAT_BOX color 47 align 144
  918.               code0 {o->init(pars->FilterLfo);}
  919.               class LFOUI
  920.             } {}
  921.             Fl_Group filterui {
  922.               label {PADsynth - Filter} open
  923.               xywh {250 55 275 75} box FLAT_BOX color 50 align 144
  924.               code0 {o->init(pars->GlobalFilter,&pars->PFilterVelocityScale,&pars->PFilterVelocityScaleFunction);}
  925.               class FilterUI
  926.             } {}
  927.           }
  928.         }
  929.       }
  930.       Fl_Button applybutton {
  931.         label {Apply Changes}
  932.         callback {pars->applyparameters(true);
  933. o->color(FL_GRAY);
  934. if (oscui!=NULL) {
  935.     oscui->applybutton->color(FL_GRAY);
  936.     oscui->applybutton->redraw();
  937. };
  938. if (resui!=NULL) {
  939.     resui->applybutton->color(FL_GRAY);
  940.     resui->applybutton->redraw();
  941. };}
  942.         xywh {45 405 185 40} box THIN_UP_BOX labelfont 1 labelsize 23
  943.         code0 {o->color(FL_RED);}
  944.       }
  945.       Fl_Button {} {
  946.         label Close
  947.         callback {padnotewindow->hide();}
  948.         xywh {320 405 175 40} box THIN_UP_BOX labelsize 20
  949.       }
  950.       Fl_Button {} {
  951.         label C
  952.         callback {presetsui->copy(pars);}
  953.         xywh {240 430 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 12 labelcolor 7
  954.       }
  955.       Fl_Button {} {
  956.         label P
  957.         callback {presetsui->paste(pars,this);}
  958.         xywh {270 430 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 12 labelcolor 7
  959.       }
  960.     }
  961.   }
  962.   Function {refresh()} {} {
  963.     code {volume->value(pars->PVolume);
  964. vsns->value(pars->PAmpVelocityScaleFunction);
  965. pan->value(pars->PPanning);
  966.  
  967. stereo->value(pars->PStereo);
  968.  
  969.  
  970. pstr->value(pars->PPunchStrength);
  971. pt->value(pars->PPunchTime);
  972. pstc->value(pars->PPunchStretch);
  973. pvel->value(pars->PPunchVelocitySensing);
  974.  
  975. detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune));
  976. detune->value(pars->PDetune-8192);
  977.  
  978. int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
  979. octave->value(k);
  980.  
  981. detunetype->value(pars->PDetuneType-1);
  982. k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
  983. coarsedet->value(k);
  984.  
  985. hz440->value(pars->Pfixedfreq);
  986. fixedfreqetdial->value(pars->PfixedfreqET);
  987.  
  988. amplfo->refresh();
  989. freqlfo->refresh();
  990. filterlfo->refresh();
  991.  
  992. ampenv->refresh();
  993. freqenv->refresh();
  994. filterenv->refresh();
  995. filterui->refresh();
  996.  
  997.  
  998. /* harmonic structure parametrs */
  999.  
  1000. resui->refresh();
  1001. if (oscui!=NULL) oscui->refresh();
  1002.  
  1003. hpbasetype->value(pars->Php.base.type);
  1004. hpbasepar1->value(pars->Php.base.par1);
  1005. hpfreqmult->value(pars->Php.freqmult);
  1006.  
  1007. hpmpar1->value(pars->Php.modulator.par1);
  1008. hpmfreq->value(pars->Php.modulator.freq);
  1009. hpwidth->value(pars->Php.width);
  1010.  
  1011. hponehalf->value(pars->Php.onehalf);
  1012. hpamptype->value(pars->Php.amp.type);
  1013. hpampmode->value(pars->Php.amp.mode);
  1014. hpamppar1->value(pars->Php.amp.par1);
  1015. hpamppar2->value(pars->Php.amp.par2);
  1016. hpautoscale->value(pars->Php.autoscale);
  1017.  
  1018. bwdial->value(pars->Pbandwidth);
  1019. if (pars->Pmode==0){
  1020.    bwprofilegroup->activate();
  1021.    bwdial->activate();
  1022.    bwcents->activate();
  1023.    hprofile->activate();
  1024.    hprofile->color(54);
  1025.    bwscale->activate();
  1026. } else {
  1027.    bwprofilegroup->deactivate();
  1028.    bwdial->deactivate();
  1029.    bwcents->deactivate();
  1030.    hprofile->deactivate();
  1031.    hprofile->color(48);
  1032.    bwscale->activate();
  1033. };
  1034.  
  1035. spectrummode->value(pars->Pmode);
  1036.  
  1037. qbasenote->value(pars->Pquality.basenote);
  1038. qsmpoct->value(pars->Pquality.smpoct);
  1039. qoct->value(pars->Pquality.oct);
  1040. qsamplesize->value(pars->Pquality.samplesize);
  1041.  
  1042. hrpostype->value(pars->Phrpos.type);
  1043. hrpospar1->value(pars->Phrpos.par1);
  1044. hrpospar2->value(pars->Phrpos.par2);
  1045. hrpospar3->value(pars->Phrpos.par3);
  1046.  
  1047. hprofile->redraw();
  1048. overtonepos->redraw();
  1049.  
  1050. osc->redraw();
  1051. pars->applyparameters(true);
  1052. applybutton->color(FL_GRAY);
  1053. applybutton->parent()->redraw();} {}
  1054.   }
  1055.   Function {~PADnoteUI()} {} {
  1056.     code {delete(oscui);
  1057. delete(resui);
  1058.  
  1059. padnotewindow->hide();
  1060. delete(padnotewindow);} {}
  1061.   }
  1062.   decl {PADnoteParameters *pars;} {public
  1063.   }
  1064.   decl {Master *master;} {public
  1065.   }
  1066.   decl {OscilEditor *oscui;} {public
  1067.   }
  1068.   decl {Oscilloscope *osc;} {public
  1069.   }
  1070.   decl {ResonanceUI *resui;} {public
  1071.   }
  1072.